package com.xinzhidi.common.core.page;

import com.github.pagehelper.PageInfo;
import com.xinzhidi.common.constant.HttpStatus;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;

import java.io.Serializable;
import java.util.List;
import java.util.function.Function;
import java.util.stream.Collectors;

/**
 * 表格分页数据对象
 *
 * @author ruoyi
 */
@ApiModel(value = "表格分页数据对象")
public class TableDataInfo<T> implements Serializable {
    private static final long serialVersionUID = 1L;

    @ApiModelProperty(value = "总记录数")
    private long total;

    private List<T> rows;

    @ApiModelProperty(value = "消息状态码")
    private int code;

    @ApiModelProperty(value = "消息内容")
    private String msg;

    /**
     * 表格数据对象
     */
    public TableDataInfo() {
    }

    /**
     * 分页
     *
     * @param list  列表数据
     * @param total 总记录数
     */
    public TableDataInfo(List<T> list, int total) {
        this.rows = list;
        this.total = total;
    }

    public long getTotal() {
        return total;
    }

    public void setTotal(long total) {
        this.total = total;
    }

    public List<T> getRows() {
        return rows;
    }

    public void setRows(List<T> rows) {
        this.rows = rows;
    }

    public int getCode() {
        return code;
    }

    public void setCode(int code) {
        this.code = code;
    }

    public String getMsg() {
        return msg;
    }

    public void setMsg(String msg) {
        this.msg = msg;
    }

    public static <T> TableDataInfo<T> getDataTable(List<T> list) {
        TableDataInfo rspData = new TableDataInfo();
        rspData.setCode(HttpStatus.SUCCESS);
        rspData.setRows(list);
        rspData.setMsg("查询成功");
        rspData.setTotal(new PageInfo(list).getTotal());
        return rspData;
    }

    public static <T, P> TableDataInfo<T> getDataTable(List<P> list, Function<P, T> mapFunc) {
        TableDataInfo<T> rspData = new TableDataInfo();
        rspData.setCode(HttpStatus.SUCCESS);
        List<T> collect = list.stream().map(mapFunc).collect(Collectors.toList());
        rspData.setRows(collect);
        rspData.setMsg("查询成功");
        rspData.setTotal(new PageInfo(list).getTotal());

        return rspData;
    }
}